home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / test_codecs.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  20KB  |  584 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. from test import test_support
  5. import unittest
  6. import codecs
  7. import sys
  8. import StringIO
  9.  
  10. class Queue(object):
  11.     '''
  12.     queue: write bytes at one end, read bytes from the other end
  13.     '''
  14.     
  15.     def __init__(self):
  16.         self._buffer = ''
  17.  
  18.     
  19.     def write(self, chars):
  20.         self._buffer += chars
  21.  
  22.     
  23.     def read(self, size = -1):
  24.         if size < 0:
  25.             s = self._buffer
  26.             self._buffer = ''
  27.             return s
  28.         else:
  29.             s = self._buffer[:size]
  30.             self._buffer = self._buffer[size:]
  31.             return s
  32.  
  33.  
  34.  
  35. class ReadTest(unittest.TestCase):
  36.     
  37.     def test_seek(self):
  38.         s = u'%s\n%s\n' % (100 * u'abc123', 100 * u'def456')
  39.         encoding = self.encoding
  40.         reader = codecs.getreader(encoding)(StringIO.StringIO(s.encode(encoding)))
  41.         for t in xrange(5):
  42.             reader.seek(0, 0)
  43.             line = reader.readline()
  44.             self.assertEqual(s[:len(line)], line)
  45.         
  46.  
  47.     
  48.     def check_partial(self, input, partialresults):
  49.         q = Queue()
  50.         r = codecs.getreader(self.encoding)(q)
  51.         result = u''
  52.         for c, partialresult in zip(input.encode(self.encoding), partialresults):
  53.             q.write(c)
  54.             result += r.read()
  55.             self.assertEqual(result, partialresult)
  56.         
  57.         self.assertEqual(r.read(), u'')
  58.         self.assertEqual(r.bytebuffer, '')
  59.         self.assertEqual(r.charbuffer, u'')
  60.  
  61.     
  62.     def test_readline(self):
  63.         
  64.         def getreader(input):
  65.             stream = StringIO.StringIO(input.encode(self.encoding))
  66.             return codecs.getreader(self.encoding)(stream)
  67.  
  68.         
  69.         def readalllines(input, keepends = True):
  70.             reader = getreader(input)
  71.             lines = []
  72.             while True:
  73.                 line = reader.readline(keepends = keepends)
  74.                 if not line:
  75.                     break
  76.                 
  77.                 lines.append(line)
  78.             return ''.join(lines)
  79.  
  80.         s = u'foo\nbar\r\nbaz\rspam\xe2\x80\xa8eggs'
  81.         self.assertEqual(readalllines(s, True), s)
  82.         self.assertEqual(readalllines(s, False), u'foobarbazspameggs')
  83.         vw = []
  84.         vwo = []
  85.         for i, lineend in enumerate(u'\n \r\n \r \xe2\x80\xa8'.split()):
  86.             vw.append(i * 200 * u'\xc3\x842' + lineend)
  87.             vwo.append(i * 200 * u'\xc3\x842')
  88.         
  89.         self.assertEqual(readalllines(''.join(vw), True), ''.join(vw))
  90.         self.assertEqual(readalllines(''.join(vw), False), ''.join(vwo))
  91.         for size in xrange(80):
  92.             for lineend in u'\n \r\n \r \xe2\x80\xa8'.split():
  93.                 s = 10 * (size * u'a' + lineend + u'xxx\n')
  94.                 reader = getreader(s)
  95.                 for i in xrange(10):
  96.                     self.assertEqual(reader.readline(keepends = True), size * u'a' + lineend)
  97.                 
  98.                 reader = getreader(s)
  99.                 for i in xrange(10):
  100.                     self.assertEqual(reader.readline(keepends = False), size * u'a')
  101.                 
  102.             
  103.         
  104.  
  105.     
  106.     def test_bug1175396(self):
  107.         s = [
  108.             '<%!--===================================================\r\n',
  109.             '    BLOG index page: show recent articles,\r\n',
  110.             "    today's articles, or articles of a specific date.\r\n",
  111.             '========================================================--%>\r\n',
  112.             '<%@inputencoding="ISO-8859-1"%>\r\n',
  113.             '<%@pagetemplate=TEMPLATE.y%>\r\n',
  114.             '<%@import=import frog.util, frog%>\r\n',
  115.             '<%@import=import frog.objects%>\r\n',
  116.             '<%@import=from frog.storageerrors import StorageError%>\r\n',
  117.             '<%\r\n',
  118.             '\r\n',
  119.             'import logging\r\n',
  120.             'log=logging.getLogger("Snakelets.logger")\r\n',
  121.             '\r\n',
  122.             '\r\n',
  123.             'user=self.SessionCtx.user\r\n',
  124.             'storageEngine=self.SessionCtx.storageEngine\r\n',
  125.             '\r\n',
  126.             '\r\n',
  127.             'def readArticlesFromDate(date, count=None):\r\n',
  128.             '    entryids=storageEngine.listBlogEntries(date)\r\n',
  129.             '    entryids.reverse() # descending\r\n',
  130.             '    if count:\r\n',
  131.             '        entryids=entryids[:count]\r\n',
  132.             '    try:\r\n',
  133.             '        return [ frog.objects.BlogEntry.load(storageEngine, date, Id) for Id in entryids ]\r\n',
  134.             '    except StorageError,x:\r\n',
  135.             '        log.error("Error loading articles: "+str(x))\r\n',
  136.             '        self.abort("cannot load articles")\r\n',
  137.             '\r\n',
  138.             'showdate=None\r\n',
  139.             '\r\n',
  140.             'arg=self.Request.getArg()\r\n',
  141.             'if arg=="today":\r\n',
  142.             "    #-------------------- TODAY'S ARTICLES\r\n",
  143.             '    self.write("<h2>Today\'s articles</h2>")\r\n',
  144.             '    showdate = frog.util.isodatestr() \r\n',
  145.             '    entries = readArticlesFromDate(showdate)\r\n',
  146.             'elif arg=="active":\r\n',
  147.             '    #-------------------- ACTIVE ARTICLES redirect\r\n',
  148.             '    self.Yredirect("active.y")\r\n',
  149.             'elif arg=="login":\r\n',
  150.             '    #-------------------- LOGIN PAGE redirect\r\n',
  151.             '    self.Yredirect("login.y")\r\n',
  152.             'elif arg=="date":\r\n',
  153.             '    #-------------------- ARTICLES OF A SPECIFIC DATE\r\n',
  154.             '    showdate = self.Request.getParameter("date")\r\n',
  155.             '    self.write("<h2>Articles written on %s</h2>"% frog.util.mediumdatestr(showdate))\r\n',
  156.             '    entries = readArticlesFromDate(showdate)\r\n',
  157.             'else:\r\n',
  158.             '    #-------------------- RECENT ARTICLES\r\n',
  159.             '    self.write("<h2>Recent articles</h2>")\r\n',
  160.             '    dates=storageEngine.listBlogEntryDates()\r\n',
  161.             '    if dates:\r\n',
  162.             '        entries=[]\r\n',
  163.             '        SHOWAMOUNT=10\r\n',
  164.             '        for showdate in dates:\r\n',
  165.             '            entries.extend( readArticlesFromDate(showdate, SHOWAMOUNT-len(entries)) )\r\n',
  166.             '            if len(entries)>=SHOWAMOUNT:\r\n',
  167.             '                break\r\n',
  168.             '                \r\n']
  169.         stream = StringIO.StringIO(''.join(s).encode(self.encoding))
  170.         reader = codecs.getreader(self.encoding)(stream)
  171.         for i, line in enumerate(reader):
  172.             self.assertEqual(line, s[i])
  173.         
  174.  
  175.     
  176.     def test_readlinequeue(self):
  177.         q = Queue()
  178.         writer = codecs.getwriter(self.encoding)(q)
  179.         reader = codecs.getreader(self.encoding)(q)
  180.         writer.write(u'foo\r')
  181.         self.assertEqual(reader.readline(keepends = False), u'foo')
  182.         writer.write(u'\nbar\r')
  183.         self.assertEqual(reader.readline(keepends = False), u'')
  184.         self.assertEqual(reader.readline(keepends = False), u'bar')
  185.         writer.write(u'baz')
  186.         self.assertEqual(reader.readline(keepends = False), u'baz')
  187.         self.assertEqual(reader.readline(keepends = False), u'')
  188.         writer.write(u'foo\r')
  189.         self.assertEqual(reader.readline(keepends = True), u'foo\r')
  190.         writer.write(u'\nbar\r')
  191.         self.assertEqual(reader.readline(keepends = True), u'\n')
  192.         self.assertEqual(reader.readline(keepends = True), u'bar\r')
  193.         writer.write(u'baz')
  194.         self.assertEqual(reader.readline(keepends = True), u'baz')
  195.         self.assertEqual(reader.readline(keepends = True), u'')
  196.         writer.write(u'foo\r\n')
  197.         self.assertEqual(reader.readline(keepends = True), u'foo\r\n')
  198.  
  199.     
  200.     def test_bug1098990_a(self):
  201.         s1 = u'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\r\n'
  202.         s2 = u'offending line: ladfj askldfj klasdj fskla dfzaskdj fasklfj laskd fjasklfzzzzaa%whereisthis!!!\r\n'
  203.         s3 = u'next line.\r\n'
  204.         s = (s1 + s2 + s3).encode(self.encoding)
  205.         stream = StringIO.StringIO(s)
  206.         reader = codecs.getreader(self.encoding)(stream)
  207.         self.assertEqual(reader.readline(), s1)
  208.         self.assertEqual(reader.readline(), s2)
  209.         self.assertEqual(reader.readline(), s3)
  210.         self.assertEqual(reader.readline(), u'')
  211.  
  212.     
  213.     def test_bug1098990_b(self):
  214.         s1 = u'aaaaaaaaaaaaaaaaaaaaaaaa\r\n'
  215.         s2 = u'bbbbbbbbbbbbbbbbbbbbbbbb\r\n'
  216.         s3 = u'stillokay:bbbbxx\r\n'
  217.         s4 = u'broken!!!!badbad\r\n'
  218.         s5 = u'againokay.\r\n'
  219.         s = (s1 + s2 + s3 + s4 + s5).encode(self.encoding)
  220.         stream = StringIO.StringIO(s)
  221.         reader = codecs.getreader(self.encoding)(stream)
  222.         self.assertEqual(reader.readline(), s1)
  223.         self.assertEqual(reader.readline(), s2)
  224.         self.assertEqual(reader.readline(), s3)
  225.         self.assertEqual(reader.readline(), s4)
  226.         self.assertEqual(reader.readline(), s5)
  227.         self.assertEqual(reader.readline(), u'')
  228.  
  229.  
  230.  
  231. class UTF16Test(ReadTest):
  232.     encoding = 'utf-16'
  233.     spamle = '\xff\xfes\x00p\x00a\x00m\x00s\x00p\x00a\x00m\x00'
  234.     spambe = '\xfe\xff\x00s\x00p\x00a\x00m\x00s\x00p\x00a\x00m'
  235.     
  236.     def test_only_one_bom(self):
  237.         (_, _, reader, writer) = codecs.lookup(self.encoding)
  238.         s = StringIO.StringIO()
  239.         f = writer(s)
  240.         f.write(u'spam')
  241.         f.write(u'spam')
  242.         d = s.getvalue()
  243.         if not d == self.spamle:
  244.             pass
  245.         self.assert_(d == self.spambe)
  246.         s = StringIO.StringIO(d)
  247.         f = reader(s)
  248.         self.assertEquals(f.read(), u'spamspam')
  249.  
  250.     
  251.     def test_partial(self):
  252.         self.check_partial(u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf', [
  253.             u'',
  254.             u'',
  255.             u'',
  256.             u'\x00',
  257.             u'\x00',
  258.             u'\x00\xc3\xbf',
  259.             u'\x00\xc3\xbf',
  260.             u'\x00\xc3\xbf\xc4\x80',
  261.             u'\x00\xc3\xbf\xc4\x80',
  262.             u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf'])
  263.  
  264.  
  265.  
  266. class UTF16LETest(ReadTest):
  267.     encoding = 'utf-16-le'
  268.     
  269.     def test_partial(self):
  270.         self.check_partial(u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf', [
  271.             u'',
  272.             u'\x00',
  273.             u'\x00',
  274.             u'\x00\xc3\xbf',
  275.             u'\x00\xc3\xbf',
  276.             u'\x00\xc3\xbf\xc4\x80',
  277.             u'\x00\xc3\xbf\xc4\x80',
  278.             u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf'])
  279.  
  280.  
  281.  
  282. class UTF16BETest(ReadTest):
  283.     encoding = 'utf-16-be'
  284.     
  285.     def test_partial(self):
  286.         self.check_partial(u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf', [
  287.             u'',
  288.             u'\x00',
  289.             u'\x00',
  290.             u'\x00\xc3\xbf',
  291.             u'\x00\xc3\xbf',
  292.             u'\x00\xc3\xbf\xc4\x80',
  293.             u'\x00\xc3\xbf\xc4\x80',
  294.             u'\x00\xc3\xbf\xc4\x80\xef\xbf\xbf'])
  295.  
  296.  
  297.  
  298. class UTF8Test(ReadTest):
  299.     encoding = 'utf-8'
  300.     
  301.     def test_partial(self):
  302.         self.check_partial(u'\x00\xc3\xbf\xdf\xbf\xe0\xa0\x80\xef\xbf\xbf', [
  303.             u'\x00',
  304.             u'\x00',
  305.             u'\x00\xc3\xbf',
  306.             u'\x00\xc3\xbf',
  307.             u'\x00\xc3\xbf\xdf\xbf',
  308.             u'\x00\xc3\xbf\xdf\xbf',
  309.             u'\x00\xc3\xbf\xdf\xbf',
  310.             u'\x00\xc3\xbf\xdf\xbf\xe0\xa0\x80',
  311.             u'\x00\xc3\xbf\xdf\xbf\xe0\xa0\x80',
  312.             u'\x00\xc3\xbf\xdf\xbf\xe0\xa0\x80',
  313.             u'\x00\xc3\xbf\xdf\xbf\xe0\xa0\x80\xef\xbf\xbf'])
  314.  
  315.  
  316.  
  317. class EscapeDecodeTest(unittest.TestCase):
  318.     
  319.     def test_empty_escape_decode(self):
  320.         self.assertEquals(codecs.escape_decode(''), ('', 0))
  321.  
  322.  
  323.  
  324. class RecodingTest(unittest.TestCase):
  325.     
  326.     def test_recoding(self):
  327.         f = StringIO.StringIO()
  328.         f2 = codecs.EncodedFile(f, 'unicode_internal', 'utf-8')
  329.         f2.write(u'a')
  330.         f2.close()
  331.  
  332.  
  333. punycode_testcases = [
  334.     (u'\xd9\x84\xd9\x8a\xd9\x87\xd9\x85\xd8\xa7\xd8\xa8\xd8\xaa\xd9\x83\xd9\x84\xd9\x85\xd9\x88\xd8\xb4\xd8\xb9\xd8\xb1\xd8\xa8\xd9\x8a\xd8\x9f', 'egbpdaj6bu4bxfgehfvwxn'),
  335.     (u'\xe4\xbb\x96\xe4\xbb\xac\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe4\xb8\x8d\xe8\xaf\xb4\xe4\xb8\xad\xe6\x96\x87', 'ihqwcrb4cv8a8dqg056pqjye'),
  336.     (u'\xe4\xbb\x96\xe5\x80\x91\xe7\x88\xb2\xe4\xbb\x80\xe9\xba\xbd\xe4\xb8\x8d\xe8\xaa\xaa\xe4\xb8\xad\xe6\x96\x87', 'ihqwctvzc91f659drss3x8bo0yb'),
  337.     (u'Pro\xc4\x8dprost\xc4\x9bnemluv\xc3\xad\xc4\x8desky', 'Proprostnemluvesky-uyb24dma41a'),
  338.     (u'\xd7\x9c\xd7\x9e\xd7\x94\xd7\x94\xd7\x9d\xd7\xa4\xd7\xa9\xd7\x95\xd7\x98\xd7\x9c\xd7\x90\xd7\x9e\xd7\x93\xd7\x91\xd7\xa8\xd7\x99\xd7\x9d\xd7\xa2\xd7\x91\xd7\xa8\xd7\x99\xd7\xaa', '4dbcagdahymbxekheh6e0a7fei0b'),
  339.     (u'\xe0\xa4\xaf\xe0\xa4\xb9\xe0\xa4\xb2\xe0\xa5\x8b\xe0\xa4\x97\xe0\xa4\xb9\xe0\xa4\xbf\xe0\xa4\xa8\xe0\xa5\x8d\xe0\xa4\xa6\xe0\xa5\x80\xe0\xa4\x95\xe0\xa5\x8d\xe0\xa4\xaf\xe0\xa5\x8b\xe0\xa4\x82\xe0\xa4\xa8\xe0\xa4\xb9\xe0\xa5\x80\xe0\xa4\x82\xe0\xa4\xac\xe0\xa5\x8b\xe0\xa4\xb2\xe0\xa4\xb8\xe0\xa4\x95\xe0\xa4\xa4\xe0\xa5\x87\xe0\xa4\xb9\xe0\xa5\x88\xe0\xa4\x82', 'i1baa7eci9glrd9b2ae1bj0hfcgg6iyaf8o0a1dig0cd'),
  340.     (u'\xe3\x81\xaa\xe3\x81\x9c\xe3\x81\xbf\xe3\x82\x93\xe3\x81\xaa\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e\xe3\x82\x92\xe8\xa9\xb1\xe3\x81\x97\xe3\x81\xa6\xe3\x81\x8f\xe3\x82\x8c\xe3\x81\xaa\xe3\x81\x84\xe3\x81\xae\xe3\x81\x8b', 'n8jok5ay5dzabd5bym9f0cm5685rrjetr6pdxa'),
  341.     (u'\xec\x84\xb8\xea\xb3\x84\xec\x9d\x98\xeb\xaa\xa8\xeb\x93\xa0\xec\x82\xac\xeb\x9e\x8c\xeb\x93\xa4\xec\x9d\xb4\xed\x95\x9c\xea\xb5\xad\xec\x96\xb4\xeb\xa5\xbc\xec\x9d\xb4\xed\x95\xb4\xed\x95\x9c\xeb\x8b\xa4\xeb\xa9\xb4\xec\x96\xbc\xeb\xa7\x88\xeb\x82\x98\xec\xa2\x8b\xec\x9d\x84\xea\xb9\x8c', '989aomsvi5e83db1d2a355cv1e0vak1dwrv93d5xbh15a0dt30a5jpsd879ccm6fea98c'),
  342.     (u'\xd0\xbf\xd0\xbe\xd1\x87\xd0\xb5\xd0\xbc\xd1\x83\xd0\xb6\xd0\xb5\xd0\xbe\xd0\xbd\xd0\xb8\xd0\xbd\xd0\xb5\xd0\xb3\xd0\xbe\xd0\xb2\xd0\xbe\xd1\x80\xd1\x8f\xd1\x82\xd0\xbf\xd0\xbe\xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8', 'b1abfaaepdrnnbgefbaDotcwatmq2g4l'),
  343.     (u'Porqu\xc3\xa9nopuedensimplementehablarenEspa\xc3\xb1ol', 'PorqunopuedensimplementehablarenEspaol-fmd56a'),
  344.     (u'T\xe1\xba\xa1isaoh\xe1\xbb\x8dkh\xc3\xb4ngth\xe1\xbb\x83ch\xe1\xbb\x89n\xc3\xb3iti\xe1\xba\xbfngVi\xe1\xbb\x87t', 'TisaohkhngthchnitingVit-kjcr8268qyxafd2f1b9g'),
  345.     (u'3\xe5\xb9\xb4B\xe7\xb5\x84\xe9\x87\x91\xe5\x85\xab\xe5\x85\x88\xe7\x94\x9f', '3B-ww4c5e180e575a65lsy2b'),
  346.     (u'\xe5\xae\x89\xe5\xae\xa4\xe5\xa5\x88\xe7\xbe\x8e\xe6\x81\xb5-with-SUPER-MONKEYS', '-with-SUPER-MONKEYS-pc58ag80a8qai00g7n9n'),
  347.     (u'Hello-Another-Way-\xe3\x81\x9d\xe3\x82\x8c\xe3\x81\x9e\xe3\x82\x8c\xe3\x81\xae\xe5\xa0\xb4\xe6\x89\x80', 'Hello-Another-Way--fc4qua05auwb3674vfr0b'),
  348.     (u'\xe3\x81\xb2\xe3\x81\xa8\xe3\x81\xa4\xe5\xb1\x8b\xe6\xa0\xb9\xe3\x81\xae\xe4\xb8\x8b2', '2-u9tlzr9756bt3uc0v'),
  349.     (u'Maji\xe3\x81\xa7Koi\xe3\x81\x99\xe3\x82\x8b5\xe7\xa7\x92\xe5\x89\x8d', 'MajiKoi5-783gue6qz075azm5e'),
  350.     (u'\xe3\x83\x91\xe3\x83\x95\xe3\x82\xa3\xe3\x83\xbcde\xe3\x83\xab\xe3\x83\xb3\xe3\x83\x90', 'de-jg4avhby1noc0d'),
  351.     (u'\xe3\x81\x9d\xe3\x81\xae\xe3\x82\xb9\xe3\x83\x94\xe3\x83\xbc\xe3\x83\x89\xe3\x81\xa7', 'd9juau41awczczp'),
  352.     (u'-> $1.00 <-', '-> $1.00 <--')]
  353. for i in punycode_testcases:
  354.     if len(i) != 2:
  355.         print repr(i)
  356.     
  357.  
  358.  
  359. class PunycodeTest(unittest.TestCase):
  360.     
  361.     def test_encode(self):
  362.         for uni, puny in punycode_testcases:
  363.             self.assertEquals(uni.encode('punycode').lower(), puny.lower())
  364.         
  365.  
  366.     
  367.     def test_decode(self):
  368.         for uni, puny in punycode_testcases:
  369.             self.assertEquals(uni, puny.decode('punycode'))
  370.         
  371.  
  372.  
  373.  
  374. class UnicodeInternalTest(unittest.TestCase):
  375.     
  376.     def test_bug1251300(self):
  377.         if sys.maxunicode > 65535:
  378.             ok = [
  379.                 ('\x00\x10\xff\xff', u'\xf4\x8f\xbf\xbf'),
  380.                 ('\x00\x00\x01\x01', u'\xc4\x81'),
  381.                 ('', u'')]
  382.             not_ok = [
  383.                 '\x7f\xff\xff\xff',
  384.                 '\x80\x00\x00\x00',
  385.                 '\x81\x00\x00\x00',
  386.                 '\x00',
  387.                 '\x00\x00\x00\x00\x00']
  388.             for internal, uni in ok:
  389.                 if sys.byteorder == 'little':
  390.                     internal = ''.join(reversed(internal))
  391.                 
  392.                 self.assertEquals(uni, internal.decode('unicode_internal'))
  393.             
  394.             for internal in not_ok:
  395.                 if sys.byteorder == 'little':
  396.                     internal = ''.join(reversed(internal))
  397.                 
  398.                 self.assertRaises(UnicodeDecodeError, internal.decode, 'unicode_internal')
  399.             
  400.         
  401.  
  402.     
  403.     def test_decode_error_attributes(self):
  404.         if sys.maxunicode > 65535:
  405.             
  406.             try:
  407.                 '\x00\x00\x00\x00\x00\x11\x11\x00'.decode('unicode_internal')
  408.             except UnicodeDecodeError:
  409.                 ex = None
  410.                 self.assertEquals('unicode_internal', ex.encoding)
  411.                 self.assertEquals('\x00\x00\x00\x00\x00\x11\x11\x00', ex.object)
  412.                 self.assertEquals(4, ex.start)
  413.                 self.assertEquals(8, ex.end)
  414.  
  415.             self.fail()
  416.         
  417.  
  418.     
  419.     def test_decode_callback(self):
  420.         if sys.maxunicode > 65535:
  421.             codecs.register_error('UnicodeInternalTest', codecs.ignore_errors)
  422.             decoder = codecs.getdecoder('unicode_internal')
  423.             ab = u'ab'.encode('unicode_internal')
  424.             ignored = decoder('%s""""%s' % (ab[:4], ab[4:]), 'UnicodeInternalTest')
  425.             self.assertEquals((u'ab', 12), ignored)
  426.         
  427.  
  428.  
  429. nameprep_tests = [
  430.     ('foo\xc2\xad\xcd\x8f\xe1\xa0\x86\xe1\xa0\x8bbar\xe2\x80\x8b\xe2\x81\xa0baz\xef\xb8\x80\xef\xb8\x88\xef\xb8\x8f\xef\xbb\xbf', 'foobarbaz'),
  431.     ('CAFE', 'cafe'),
  432.     ('\xc3\x9f', 'ss'),
  433.     ('\xc4\xb0', 'i\xcc\x87'),
  434.     ('\xc5\x83\xcd\xba', '\xc5\x84 \xce\xb9'),
  435.     (None, None),
  436.     ('j\xcc\x8c\xc2\xa0\xc2\xaa', '\xc7\xb0 a'),
  437.     ('\xe1\xbe\xb7', '\xe1\xbe\xb6\xce\xb9'),
  438.     ('\xc7\xb0', '\xc7\xb0'),
  439.     ('\xce\x90', '\xce\x90'),
  440.     ('\xce\xb0', '\xce\xb0'),
  441.     ('\xe1\xba\x96', '\xe1\xba\x96'),
  442.     ('\xe1\xbd\x96', '\xe1\xbd\x96'),
  443.     (' ', ' '),
  444.     ('\xc2\xa0', ' '),
  445.     ('\xe1\x9a\x80', None),
  446.     ('\xe2\x80\x80', ' '),
  447.     ('\xe2\x80\x8b', ''),
  448.     ('\xe3\x80\x80', ' '),
  449.     ('\x10\x7f', '\x10\x7f'),
  450.     ('\xc2\x85', None),
  451.     ('\xe1\xa0\x8e', None),
  452.     ('\xef\xbb\xbf', ''),
  453.     ('\xf0\x9d\x85\xb5', None),
  454.     ('\xef\x84\xa3', None),
  455.     ('\xf3\xb1\x88\xb4', None),
  456.     ('\xf4\x8f\x88\xb4', None),
  457.     ('\xf2\x8f\xbf\xbe', None),
  458.     ('\xf4\x8f\xbf\xbf', None),
  459.     ('\xed\xbd\x82', None),
  460.     ('\xef\xbf\xbd', None),
  461.     ('\xe2\xbf\xb5', None),
  462.     ('\xcd\x81', '\xcc\x81'),
  463.     ('\xe2\x80\x8e', None),
  464.     ('\xe2\x80\xaa', None),
  465.     ('\xf3\xa0\x80\x81', None),
  466.     ('\xf3\xa0\x81\x82', None),
  467.     ('foo\xd6\xbebar', None),
  468.     ('foo\xef\xb5\x90bar', None),
  469.     ('foo\xef\xb9\xb6bar', 'foo \xd9\x8ebar'),
  470.     ('\xd8\xa71', None),
  471.     ('\xd8\xa71\xd8\xa8', '\xd8\xa71\xd8\xa8'),
  472.     (None, None),
  473.     ('X\xc2\xad\xc3\x9f\xc4\xb0\xe2\x84\xa1j\xcc\x8c\xc2\xa0\xc2\xaa\xce\xb0\xe2\x80\x80', 'xssi\xcc\x87tel\xc7\xb0 a\xce\xb0 '),
  474.     ('X\xc3\x9f\xe3\x8c\x96\xc4\xb0\xe2\x84\xa1\xe2\x92\x9f\xe3\x8c\x80', 'xss\xe3\x82\xad\xe3\x83\xad\xe3\x83\xa1\xe3\x83\xbc\xe3\x83\x88\xe3\x83\xabi\xcc\x87tel(d)\xe3\x82\xa2\xe3\x83\x91\xe3\x83\xbc\xe3\x83\x88')]
  475.  
  476. class NameprepTest(unittest.TestCase):
  477.     
  478.     def test_nameprep(self):
  479.         nameprep = nameprep
  480.         import encodings.idna
  481.         for orig, prepped in enumerate(nameprep_tests):
  482.             if orig is None:
  483.                 continue
  484.             
  485.             orig = unicode(orig, 'utf-8')
  486.             if prepped is None:
  487.                 self.assertRaises(UnicodeError, nameprep, orig)
  488.                 continue
  489.             prepped = unicode(prepped, 'utf-8')
  490.             
  491.             try:
  492.                 self.assertEquals(nameprep(orig), prepped)
  493.             continue
  494.             except Exception:
  495.                 e = None
  496.                 raise test_support.TestFailed('Test 3.%d: %s' % (pos + 1, str(e)))
  497.                 continue
  498.             
  499.  
  500.         
  501.  
  502.  
  503.  
  504. class CodecTest(unittest.TestCase):
  505.     
  506.     def test_builtin(self):
  507.         self.assertEquals(unicode('python.org', 'idna'), u'python.org')
  508.  
  509.     
  510.     def test_stream(self):
  511.         import StringIO
  512.         r = codecs.getreader('idna')(StringIO.StringIO('abc'))
  513.         r.read(3)
  514.         self.assertEquals(r.read(), u'')
  515.  
  516.  
  517.  
  518. class CodecsModuleTest(unittest.TestCase):
  519.     
  520.     def test_decode(self):
  521.         self.assertEquals(codecs.decode('\xe4\xf6\xfc', 'latin-1'), u'\xc3\xa4\xc3\xb6\xc3\xbc')
  522.         self.assertRaises(TypeError, codecs.decode)
  523.         self.assertEquals(codecs.decode('abc'), u'abc')
  524.         self.assertRaises(UnicodeDecodeError, codecs.decode, '\xff', 'ascii')
  525.  
  526.     
  527.     def test_encode(self):
  528.         self.assertEquals(codecs.encode(u'\xc3\xa4\xc3\xb6\xc3\xbc', 'latin-1'), '\xe4\xf6\xfc')
  529.         self.assertRaises(TypeError, codecs.encode)
  530.         self.assertEquals(codecs.encode(u'abc'), 'abc')
  531.         self.assertRaises(UnicodeEncodeError, codecs.encode, u'\xc3\xbfff', 'ascii')
  532.  
  533.     
  534.     def test_register(self):
  535.         self.assertRaises(TypeError, codecs.register)
  536.  
  537.     
  538.     def test_lookup(self):
  539.         self.assertRaises(TypeError, codecs.lookup)
  540.         self.assertRaises(LookupError, codecs.lookup, '__spam__')
  541.  
  542.  
  543.  
  544. class StreamReaderTest(unittest.TestCase):
  545.     
  546.     def setUp(self):
  547.         self.reader = codecs.getreader('utf-8')
  548.         self.stream = StringIO.StringIO('\xed\x95\x9c\n\xea\xb8\x80')
  549.  
  550.     
  551.     def test_readlines(self):
  552.         f = self.reader(self.stream)
  553.         self.assertEquals(f.readlines(), [
  554.             u'\xed\x95\x9c\n',
  555.             u'\xea\xb8\x80'])
  556.  
  557.  
  558.  
  559. class Str2StrTest(unittest.TestCase):
  560.     
  561.     def test_read(self):
  562.         sin = '\x80'.encode('base64_codec')
  563.         reader = codecs.getreader('base64_codec')(StringIO.StringIO(sin))
  564.         sout = reader.read()
  565.         self.assertEqual(sout, '\x80')
  566.         self.assert_(isinstance(sout, str))
  567.  
  568.     
  569.     def test_readline(self):
  570.         sin = '\x80'.encode('base64_codec')
  571.         reader = codecs.getreader('base64_codec')(StringIO.StringIO(sin))
  572.         sout = reader.readline()
  573.         self.assertEqual(sout, '\x80')
  574.         self.assert_(isinstance(sout, str))
  575.  
  576.  
  577.  
  578. def test_main():
  579.     test_support.run_unittest(UTF16Test, UTF16LETest, UTF16BETest, UTF8Test, EscapeDecodeTest, RecodingTest, PunycodeTest, UnicodeInternalTest, NameprepTest, CodecTest, CodecsModuleTest, StreamReaderTest, Str2StrTest)
  580.  
  581. if __name__ == '__main__':
  582.     test_main()
  583.  
  584.